import axios from 'axios';

// 设置API的基础URL，根据环境变量进行配置
// 在生产环境中，baseURL可能会根据环境变量VITE_API_HOST进行调整
const baseURL = '/api'; // 这里假设所有环境都使用相同的API路径

// 创建axios实例，并设置超时时间为30秒
const r = axios.create({
  baseURL: baseURL,
  timeout: 30000
});

// 请求拦截器
// 在发送请求之前，检查本地存储中是否有token
// 如果有token，将其添加到请求头中作为授权凭证
r.interceptors.request.use(function (config) {
  let token = localStorage.getItem("token");
  if (token) {
    if (!config.headers) {
      // 如果请求头不存在，则创建一个新的headers对象
      config.headers = {};
    }
    // 设置Authorization请求头，携带token
    config.headers.Authorization = token;
  }
  return config;
}, function (error) {
  // 对请求错误进行处理，例如网络问题或配置错误
  // 返回reject的Promise，表示请求失败
  return Promise.reject(error);
});

// 响应拦截器
// 对响应数据进行处理，例如检查状态码或处理错误
r.interceptors.response.use(function (response) {
  // 对于2xx状态码的响应，执行这里的代码
  // 通常，我们直接返回响应的数据部分
  return response.data;
}, function (error) {
  // 对于非2xx状态码的响应，执行这里的代码
  // 这里可以处理错误，例如网络错误、服务器错误等
  // 返回reject的Promise，表示响应失败
  return Promise.reject(error);
});

// 导出一个请求函数，用于发起API请求
// 这个函数接收一个配置对象，该对象定义了请求的URL、方法、数据等
export function request(config) {
  // 使用创建的axios实例发起请求，并返回Promise
  return r.request(config);
}